#include "Logger.h"
#include <iostream>
#include <fstream>
#include <string>
#include <mutex>

// 私有构造函数的实现
Logger::Logger() {
    // 打开日志文件
    logFile.open("app.log", std::ios::app);
}

// 析构函数的实现
Logger::~Logger() {
    if (logFile.is_open()) {
        logFile.close();
    }
}

// 记录日志的方法的实现
void Logger::Log(const std::string& message, LogLevel level) {
    std::lock_guard<std::mutex> lock(mut); // 确保线程安全
    auto logMessage = FormatMessage(message, level);
    std::cout << logMessage << std::endl; // 输出到标准输出
    logFile << logMessage << std::endl;   // 输出到文件
}

// 获取日志实例的静态方法的实现
Logger& Logger::Instance() {
    static Logger instance;
    return instance;
}

// 格式化日志信息的方法的实现
std::string Logger::FormatMessage(const std::string& message, LogLevel level) {
    std::string logLevel;
    switch (level) {
        case LogLevel::INFO:
            logLevel = "[INFO] ";
        break;
        case LogLevel::WARNING:
            logLevel = "[WARNING] ";
        break;
        case LogLevel::ERROR:
            logLevel = "[ERROR] ";
        break;
    }
    return logLevel + message;
}

// 宏定义，简化日志调用
//#define LOG_INFO(message) Logger::Instance().Log(message, LogLevel::INFO)
//#define LOG_WARNING(message) Logger::Instance().Log(message, LogLevel::WARNING)
//#define LOG_ERROR(message) Logger::Instance().Log(message, LogLevel::ERROR)

// 使用示例
/*int main() {
    LOG_INFO("Application is starting");
    LOG_WARNING("This is a warning message");
    LOG_ERROR("This is an error message");
    return 0;
}*/
